package com.br.folhapagamento.folhagenerica;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.ArrayList;

public abstract class Empresa implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private String nome;
	private ArrayList<Funcionario> funcionarioList; 

	public Empresa() {
		super();
		
		this.funcionarioList = new ArrayList<Funcionario>();
	}
	
	public Empresa(String nome) {
		super();
		this.nome = nome;
		
		this.funcionarioList = new ArrayList<Funcionario>();
	}
	
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public ArrayList<Funcionario> getFuncionarioList() {
		return funcionarioList;
	}

	public void setFuncionarioList(ArrayList<Funcionario> funcionarioList) {
		this.funcionarioList = funcionarioList;
	}

	public void gerarFolha()
	{
		System.out.println("Folha de Pagamento da empresa - " + this.nome);
		System.out.println("-----------------------------");
		
		for (Funcionario f : funcionarioList)
		{
			System.out.println("Funcionário: " + f.getNome());
			System.out.println("Cargo: " + f.cargo());
			System.out.println("Salário: " + f.salario());
			System.out.println("-----------------------------");
		}
	}
	
	public void gerarFolhaEmArquivo()
	{
		System.out.println("Gerando folha de pagamento da empresa " + this.nome);
		
		try {
			FileWriter fw = new FileWriter("FolhaPagamento - " + this.nome + ".txt");
			PrintWriter pw = new PrintWriter(fw);

			pw.println("Folha de pagamento 2012");
			pw.println("Empresa: " + this.nome);
			pw.println("--------------------------------------");
			pw.println("            FUNCIONÁRIOS");
			
			for (Funcionario f : funcionarioList)
			{
				pw.println("--------------------------------------");
				pw.println("Funcionário: " + f.getNome());
				pw.println("Cargo: " + f.cargo());
				pw.println("Salário: " + f.salario());
			}
			
			pw.println("--------------------------------------");
			
			pw.close();
			
			System.out.println("Arquivo gerado com sucesso.");
		} catch (Exception e) {
			System.out.println("Erro ao gerar arquivo.");
		}
	}
	
	public void exibirFuncionario()
	{
		
	}
	
	public Boolean inserirFuncionario(Funcionario f) throws Exception
	{
		if (!funcionarioExiste(f)) {
			this.funcionarioList.add(f);
			return true;
		} else {
			throw new Exception("Este funcionário já existe");
		}
	}
	
	private Boolean funcionarioExiste(Funcionario f) {
		Boolean funcionarioExiste = false;		
		
		for (Funcionario funcionario : funcionarioList) {
			if (f.getCodigo() == funcionario.getCodigo())
				funcionarioExiste = true;
		}
		
		return funcionarioExiste;
	}
}
